package model;

/**
 * 人员抽象基类
 * 这是一个抽象类，不能直接实例化对象
 * 为Student和Teacher提供共享属性和抽象业务方法
 * 使用抽象类可以定义共同的属性和方法，并强制子类实现特定功能
 */
public abstract class Person {
    // 私有属性 - 封装了人员的基本信息，只能通过getter方法访问
    private String id;     // 人员编号
    private String name;   // 人员姓名
    private String gender; // 人员性别
    
    /**
     * 构造方法
     * 虽然是抽象类，但仍然需要构造方法供子类调用
     * @param id 人员编号
     * @param name 人员姓名
     * @param gender 人员性别
     */
    public Person(String id, String name, String gender) {
        this.id = id;     // 初始化人员编号
        this.name = name; // 初始化人员姓名
        this.gender = gender; // 初始化人员性别
    }
    
    /**
     * 获取人员编号
     * @return 人员编号
     */
    public String getId() {
        return id;
    }
    
    /**
     * 获取人员姓名
     * @return 人员姓名
     */
    public String getName() {
        return name;
    }
    
    /**
     * 获取人员性别
     * @return 人员性别
     */
    public String getGender() {
        return gender;
    }
    
    /**
     * 抽象业务方法 - 打印工作表
     * 这是一个抽象方法，没有具体实现，需要由子类提供实现
     * 通过抽象方法，我们可以定义一个统一的接口，让不同的子类以不同的方式实现
     * 这体现了面向对象编程中的多态特性
     */
    public abstract void printWorksheet();
}
